package service



// type ChatBot struct {
// 	client    *ark.Client
// 	model     string
// 	history   []ark.ChatCompletionMessage
// 	maxTokens int
// 	sessionID string   // 当前会话ID
// 	db        *sqlx.DB // 数据库连接
// }







// // NewChatBot 创建新的聊天机器人实例
// func NewChatBot(apiKey, baseURL, model string, maxTokens int) *ChatBot {
// 	config := ark.DefaultConfig(apiKey)
// 	config.BaseURL = baseURL

// 	client := ark.NewClientWithConfig(config)

// 	// 初始化系统消息
// 	history := []ark.ChatCompletionMessage{
// 		{
// 			Role:    ark.ChatMessageRoleSystem,
// 			Content: "你是一个有用的人工智能助手，请用中文回答用户的问题。",
// 		},
// 	}

// 	return &ChatBot{
// 		client:    client,
// 		model:     model,
// 		history:   history,
// 		maxTokens: maxTokens,
// 		sessionID: generateSessionID(),
// 		db:        database.Db,
// 	}
// }



// // 数据库操作函数

// // SaveSession 保存当前会话到数据库
// func (bot *ChatBot) SaveSession() error {
// 	// 生成会话名称（使用第一条用户消息或默认名称）
// 	sessionName := "新对话"
// 	if len(bot.history) > 1 {
// 		for _, msg := range bot.history[1:] {
// 			if msg.Role == ark.ChatMessageRoleUser {
// 				sessionName = msg.Content
// 				break
// 			}
// 		}
// 	}

// 	// 确保sessionName是有效的UTF-8字符串
// 	sessionName = strings.ToValidUTF8(sessionName, "?")
// 	// 限制sessionName长度，避免数据库字段长度问题
// 	if len([]rune(sessionName)) > 1000 {
// 		sessionName = string([]rune(sessionName)[:1000])
// 	}

// 	session := ChatSession{
// 		ID:        bot.sessionID,
// 		Name:      sessionName,
// 		History:   bot.history,
// 		CreatedAt: time.Now(),
// 		UpdatedAt: time.Now(),
// 	}

// 	// 将session转换为JSON
// 	sessionJSON, err := json.Marshal(session)
// 	if err != nil {
// 		return fmt.Errorf("编码会话数据失败: %v", err)
// 	}

// 	// 确保JSON数据是有效的UTF-8
// 	jsonStr := strings.ToValidUTF8(string(sessionJSON), "?")

// 	// 检查会话是否已存在
// 	var count int
// 	err = bot.db.Get(&count, "SELECT COUNT(*) FROM chat_sessions WHERE session_id = ?", bot.sessionID)
// 	if err != nil {
// 		return fmt.Errorf("检查会话存在性失败: %v", err)
// 	}

// 	currentTime := helper.GetCurrentTimeString()

// 	if count > 0 {
// 		// 更新现有会话
// 		_, err = bot.db.Exec(`
// 			UPDATE chat_sessions 
// 			SET session_name = ?, content = ?, updated_at = ? 
// 			WHERE session_id = ?
// 		`, sessionName, jsonStr, currentTime, bot.sessionID)
// 	} else {
// 		// 插入新会话
// 		_, err = bot.db.Exec(`
// 			INSERT INTO chat_sessions (session_id, session_name, content, created_at, updated_at) 
// 			VALUES (?, ?, ?, ?, ?)
// 		`, bot.sessionID, sessionName, jsonStr, currentTime, currentTime)
// 	}

// 	if err != nil {
// 		return fmt.Errorf("保存会话到数据库失败: %v", err)
// 	}

// 	return nil
// }

// // LoadSession 从数据库加载会话
// func (bot *ChatBot) LoadSession(sessionID string) error {
// 	var contentJSON string
// 	err := bot.db.Get(&contentJSON, "SELECT content FROM chat_sessions WHERE session_id = ?", sessionID)
// 	if err != nil {
// 		if err == sql.ErrNoRows {
// 			return fmt.Errorf("会话不存在: %s", sessionID)
// 		}
// 		return fmt.Errorf("从数据库加载会话失败: %v", err)
// 	}

// 	var session ChatSession
// 	if err := json.Unmarshal([]byte(contentJSON), &session); err != nil {
// 		return fmt.Errorf("解码会话数据失败: %v", err)
// 	}

// 	bot.history = session.History
// 	bot.sessionID = session.ID
// 	return nil
// }

// // ListSessions 从数据库列出所有保存的会话
// func ListSessions() ([]ChatSession, error) {
// 	var rows []SessionRow
// 	err := database.Db.Select(&rows, `
// 		SELECT session_id, session_name, content, created_at, updated_at 
// 		FROM chat_sessions 
// 		ORDER BY updated_at DESC
// 	`)
// 	if err != nil {
// 		return nil, fmt.Errorf("查询会话列表失败: %v", err)
// 	}

// 	var sessions []ChatSession
// 	for _, row := range rows {
// 		var session ChatSession
// 		if err := json.Unmarshal([]byte(row.Content), &session); err != nil {
// 			continue
// 		}

// 		// 更新从数据库读取的时间戳
// 		session.CreatedAt = row.CreatedAt
// 		session.UpdatedAt = row.UpdatedAt
// 		sessions = append(sessions, session)
// 	}

// 	return sessions, nil
// }

// // DeleteSession 从数据库删除会话
// func deleteSession(sessionID string) error {
// 	result, err := database.Db.Exec("DELETE FROM chat_sessions WHERE session_id = ?", sessionID)
// 	if err != nil {
// 		return fmt.Errorf("删除会话失败: %v", err)
// 	}

// 	rowsAffected, err := result.RowsAffected()
// 	if err != nil {
// 		return fmt.Errorf("获取删除结果失败: %v", err)
// 	}

// 	if rowsAffected == 0 {
// 		return fmt.Errorf("会话不存在: %s", sessionID)
// 	}

// 	return nil
// }

// // 初始化聊天机器人配置
// func InitChatBot() {
// 	// 初始化数据库连接
// 	if err := database.InitDB(); err != nil {
// 		fmt.Printf("数据库初始化失败: %v\n", err)
// 		panic(err)
// 	}
// 	fmt.Println("数据库连接成功!")
// }

// // 获取所有会话
// func GetSessions(c *gin.Context) {
// 	sessions, err := ListSessions()
// 	if err != nil {
// 		c.JSON(http.StatusInternalServerError, SessionListResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}

// 	c.JSON(http.StatusOK, SessionListResponse{
// 		Sessions: sessions,
// 		Success:  true,
// 	})
// }

// // 创建新会话
// func CreateSession(c *gin.Context) {
// 	// 创建新的聊天机器人实例
// 	bot := NewChatBot(
// 		"77db7d27-81e7-4992-8bdf-a7e26516c774",
// 		"https://ark.cn-beijing.volces.com/api/v3",
// 		"ep-20250928231938-bfrmf",
// 		4000,
// 	)

// 	// 保存会话
// 	if err := bot.SaveSession(); err != nil {
// 		c.JSON(http.StatusInternalServerError, SessionResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}

// 	session := ChatSession{
// 		ID:        bot.sessionID,
// 		Name:      "新对话",
// 		History:   bot.history,
// 		CreatedAt: time.Now(),
// 		UpdatedAt: time.Now(),
// 	}

// 	c.JSON(http.StatusOK, SessionResponse{
// 		Session: session,
// 		Success: true,
// 	})
// }

// // 加载会话
// func LoadSession(c *gin.Context) {
// 	sessionID := c.Param("id")

// 	bot := NewChatBot(
// 		"77db7d27-81e7-4992-8bdf-a7e26516c774",
// 		"https://ark.cn-beijing.volces.com/api/v3",
// 		"ep-20250928231938-bfrmf",
// 		4000,
// 	)

// 	if err := bot.LoadSession(sessionID); err != nil {
// 		c.JSON(http.StatusNotFound, SessionResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}

// 	session := ChatSession{
// 		ID:        bot.sessionID,
// 		Name:      getSessionName(bot.history),
// 		History:   bot.history,
// 		CreatedAt: time.Now(),
// 		UpdatedAt: time.Now(),
// 	}

// 	c.JSON(http.StatusOK, SessionResponse{
// 		Session: session,
// 		Success: true,
// 	})
// }

// // 删除会话
// func DeleteSession(c *gin.Context) {
// 	sessionID := c.Param("id")

// 	if err := deleteSession(sessionID); err != nil {
// 		c.JSON(http.StatusInternalServerError, gin.H{
// 			"success": false,
// 			"error":   err.Error(),
// 		})
// 		return
// 	}

// 	c.JSON(http.StatusOK, gin.H{
// 		"success": true,
// 		"message": "会话删除成功",
// 	})
// }

// // 聊天接口
// func Chat(c *gin.Context) {
// 	var req ChatRequest
// 	if err := c.ShouldBindJSON(&req); err != nil {
// 		c.JSON(http.StatusBadRequest, ChatResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}

// 	// 创建或获取聊天机器人实例
// 	bot := NewChatBot(
// 		"77db7d27-81e7-4992-8bdf-a7e26516c774",
// 		"https://ark.cn-beijing.volces.com/api/v3",
// 		"ep-20250928231938-bfrmf",
// 		4000,
// 	)

// 	// 如果提供了sessionID，加载该会话
// 	if req.SessionID != "" {
// 		if err := bot.LoadSession(req.SessionID); err != nil {
// 			// 如果加载失败，创建新会话
// 			fmt.Printf("加载会话失败，创建新会话: %v\n", err)
// 		}
// 	}

// 	ctx := context.Background()

// 	// 流式响应
// 	c.Header("Content-Type", "text/event-stream; charset=utf-8")
// 	c.Header("Cache-Control", "no-cache")
// 	c.Header("Connection", "keep-alive")
// 	c.Header("Access-Control-Allow-Origin", "*")
// 	c.Header("Access-Control-Allow-Headers", "Content-Type")
// 	c.Header("Access-Control-Allow-Methods", "POST, OPTIONS")

// 	// 添加用户消息到历史记录
// 	bot.history = append(bot.history, ark.ChatCompletionMessage{
// 		Role:    ark.ChatMessageRoleUser,
// 		Content: req.Message,
// 	})

// 	stream, err := bot.client.CreateChatCompletionStream(
// 		ctx,
// 		ark.ChatCompletionRequest{
// 			Model:     bot.model,
// 			Messages:  bot.history,
// 			MaxTokens: bot.maxTokens,
// 			Stream:    true,
// 		},
// 	)

// 	if err != nil {
// 		bot.history = bot.history[:len(bot.history)-1]
// 		c.JSON(http.StatusInternalServerError, ChatResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}
// 	defer stream.Close()

// 	var fullResponse strings.Builder

// 	for {
// 		recv, err := stream.Recv()
// 		if err == io.EOF {
// 			break
// 		}
// 		if err != nil {
// 			c.JSON(http.StatusInternalServerError, ChatResponse{
// 				Success: false,
// 				Error:   err.Error(),
// 			})
// 			return
// 		}

// 		if len(recv.Choices) > 0 && recv.Choices[0].Delta.Content != "" {
// 			content := recv.Choices[0].Delta.Content
// 			fullResponse.WriteString(content)

// 			// 发送流式数据 - 使用正确的SSE格式
// 			// 转义JSON中的特殊字符
// 			escapedContent := strings.ReplaceAll(content, `\`, `\\`)
// 			escapedContent = strings.ReplaceAll(escapedContent, `"`, `\"`)
// 			escapedContent = strings.ReplaceAll(escapedContent, "\n", `\n`)
// 			escapedContent = strings.ReplaceAll(escapedContent, "\r", `\r`)
// 			escapedContent = strings.ReplaceAll(escapedContent, "\t", `\t`)

// 			data := fmt.Sprintf(`{"content":"%s","session_id":"%s"}`, escapedContent, bot.sessionID)
// 			c.Writer.WriteString(fmt.Sprintf("data: %s\n\n", data))
// 			c.Writer.Flush()
// 		}
// 	}

// 	// 添加助手回复到历史记录
// 	bot.history = append(bot.history, ark.ChatCompletionMessage{
// 		Role:    ark.ChatMessageRoleAssistant,
// 		Content: fullResponse.String(),
// 	})

// 	// 自动保存会话
// 	if err := bot.SaveSession(); err != nil {
// 		fmt.Printf("警告: 自动保存会话失败: %v\n", err)
// 	}

// 	// 发送结束信号
// 	endData := fmt.Sprintf(`{"type":"end","session_id":"%s"}`, bot.sessionID)
// 	c.Writer.WriteString(fmt.Sprintf("data: %s\n\n", endData))
// 	c.Writer.WriteString("data: [DONE]\n\n")
// 	c.Writer.Flush()
// }

// // AgentChat 支持工具调用的AI Agent聊天接口
// func AgentChat(c *gin.Context) {
// 	var req ChatRequest
// 	if err := c.ShouldBindJSON(&req); err != nil {
// 		c.JSON(http.StatusBadRequest, ChatResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}

// 	// 创建AI Agent实例，如果提供了sessionID则使用它
// 	agent := NewAIAgentWithSession(
// 		"77db7d27-81e7-4992-8bdf-a7e26516c774",
// 		"https://ark.cn-beijing.volces.com/api/v3",
// 		"ep-20250928231938-bfrmf",
// 		4000,
// 		req.SessionID, // 直接传入sessionID，如果为空则生成新的
// 	)

// 	// 如果提供了sessionID，尝试加载该会话
// 	if req.SessionID != "" {
// 		if err := agent.LoadSession(req.SessionID); err != nil {
// 			// 如果加载失败，使用新生成的sessionID
// 			fmt.Printf("加载会话失败，使用新会话: %v\n", err)
// 		}
// 	}

// 	// 流式响应
// 	c.Header("Content-Type", "text/event-stream; charset=utf-8")
// 	c.Header("Cache-Control", "no-cache")
// 	c.Header("Connection", "keep-alive")
// 	c.Header("Access-Control-Allow-Origin", "*")
// 	c.Header("Access-Control-Allow-Headers", "Content-Type")
// 	c.Header("Access-Control-Allow-Methods", "POST, OPTIONS")

// 	// 使用Agent进行流式聊天（支持工具调用）
// 	if err := agent.ChatWithToolsStream(req.Message, c.Writer); err != nil {
// 		c.JSON(http.StatusInternalServerError, ChatResponse{
// 			Success: false,
// 			Error:   err.Error(),
// 		})
// 		return
// 	}

// 	// 自动保存会话
// 	if err := agent.SaveSession(); err != nil {
// 		fmt.Printf("警告: 自动保存会话失败: %v\n", err)
// 	}

// 	// 发送结束信号
// 	endData := fmt.Sprintf(`{"type":"end","session_id":"%s"}`, agent.sessionID)
// 	c.Writer.WriteString(fmt.Sprintf("data: %s\n\n", endData))
// 	c.Writer.WriteString("data: [DONE]\n\n")
// 	c.Writer.Flush()
// }

// // 获取会话名称的辅助函数
// func getSessionName(history []ark.ChatCompletionMessage) string {
// 	if len(history) > 1 {
// 		for _, msg := range history[1:] {
// 			if msg.Role == ark.ChatMessageRoleUser {
// 				content := msg.Content
// 				return content
// 			}
// 		}
// 	}
// 	return "新对话"
// }

// func main() {
// 	// 初始化聊天机器人
// 	InitChatBot()

// 	// 设置gin模式
// 	gin.SetMode(gin.ReleaseMode)

// 	// 创建gin路由
// 	r := gin.Default()

// 	// 设置CORS中间件
// 	r.Use(func(c *gin.Context) {
// 		c.Header("Access-Control-Allow-Origin", "*")
// 		c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
// 		c.Header("Access-Control-Allow-Headers", "Content-Type, Authorization")

// 		if c.Request.Method == "OPTIONS" {
// 			c.AbortWithStatus(204)
// 			return
// 		}

// 		c.Next()
// 	})

// 	// 静态文件服务（用于前端构建后的文件）
// 	r.Static("/static", "./frontend/dist")

// 	// 前端路由（SPA支持）
// 	r.NoRoute(func(c *gin.Context) {
// 		c.File("./frontend/dist/index.html")
// 	})

// 	// API路由
// 	api := r.Group("/api")
// 	{
// 		// 会话管理
// 		api.GET("/sessions", GetSessions)          // 获取所有会话
// 		api.POST("/sessions", CreateSession)       // 创建新会话
// 		api.GET("/sessions/:id", LoadSession)      // 加载指定会话
// 		api.DELETE("/sessions/:id", DeleteSession) // 删除指定会话

// 		// 聊天接口
// 		api.POST("/chat", Chat) // 聊天接口
// 	}

// 	fmt.Println("AI聊天应用启动成功!")
// 	fmt.Println("访问地址: http://localhost:8080")
// 	fmt.Println("API文档:")
// 	fmt.Println("  GET  /api/sessions     - 获取所有会话")
// 	fmt.Println("  POST /api/sessions     - 创建新会话")
// 	fmt.Println("  GET  /api/sessions/:id - 加载指定会话")
// 	fmt.Println("  DELETE /api/sessions/:id - 删除指定会话")
// 	fmt.Println("  POST /api/chat         - 聊天接口")

// 	// 启动服务器
// 	if err := r.Run(":8080"); err != nil {
// 		fmt.Printf("服务器启动失败: %v\n", err)
// 	}
// }
